package zk_task

import (
	"EasyCollect/global"
	log "code.google.com/p/log4go"
	"fmt"
	"strings"
	"EasyCollect/util"
	"EasyCollect/task"
)
/**
	当收到zk通知时，回调用方法触发调用该方法，将更新内容映射到全局配置上
 */
func scanConfig(path string,value string,tasker *global.Task){

	log.Info("taskId [%s] taskName [%s] zkNode Data changed path[%s] value[%s]",tasker.TaskId, tasker.TaskName,path,value)
	if ""==value {
		errStr := fmt.Sprintf("zkNode path[%s] value is null ",value)
		log.Error(errStr)
	}

	//如果要更新的值是一个手动触发定时任务的开发，则手动触发一下定时任务
	if strings.Contains(path,open){
		go task.QueueManager.ExcuseCronTask(tasker.TaskName)
	}
	//如果要更新的值是Stop,则根据结果进行操作，如果是true，则暂停服务，如果是false，则取消服务暂停
	if strings.Contains(path,stop) {
		stop := util.ToBool(value,false)
		if stop {
			go task.QueueManager.StopTask(tasker.TaskName)
		}else{
			go task.QueueManager.StartTask(tasker.TaskName)
		}
	}

	//更新的值是线程数
	if strings.Contains(path,thread){
		tasker.Thread=util.GetInt(value,tasker.Thread)
	}
	//如果要更新的值是限速，则更新一下速度
	if strings.Contains(path,speed){
		tasker.Speed=util.ToInt64(value,tasker.Speed)
	}
	//更新的值是Limit
	if strings.Contains(path,srcLimit){
		tasker.SrcLimit = util.GetInt(value,tasker.SrcLimit)
	}

	//更新的值是分片总数,本身就是一个分片任务，才允许更新此值
	if strings.Contains(path,shardingCount){
		if tasker.ShardingCount>0 {
			tasker.ShardingCount = util.GetInt(value,tasker.ShardingCount)
		}
	}
	//更新的值是key主键的引用
	if strings.Contains(path,srcKey){
		tasker.SrcKey = value
	}
	//更新的值是src-query
	if strings.Contains(path,srcQuery){
		tasker.SrcQuery = value
	}
	//更新的值是查询条件
	if strings.Contains(path,srcCondition){
		tasker.SrcCondition=srcCondition
	}
	//更新的值是parameter
	if strings.Contains(path,srcParameter){
		tasker.SrcParameter=util.ToSTringSlice(value)
	}

}
